package com.zrrd.learn.chapter08面向对象.pattern.myreflech;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;

/**
 * 狮子
 *
 * @author wrn
 * @version 1.0
 * @date 2023/8/7 15:14
 */

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Lion {

    private String name;

    private String color;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    //1 使用反射实例化一个Lion子, 辛巴  红色


    //1.1 LionFactory 里面有一个方法 public static Lion getLion(String name,String color){
    // }

    public static void main(String[] args) {

        Lion rm = new Lion();
        //any RebotMethod 子类
        Class<? extends Lion> class01 = rm.getClass();
        try {
            Lion rm2 = class01.newInstance();
            Method[] ms = class01.getDeclaredMethods();
            for (Method m : ms) {
                if (m.getName().equals("setName")) {
                    //你执行这个方法 。我要用一下
                     m.invoke(rm, "辛巴");
                }
                if (m.getName().equals("setColor")) {
                    //你执行这个方法 。我要用一下
                    m.invoke(rm, "红色");
                }
            }
            System.out.println(rm.getName());
            System.out.println(rm.getColor());

        } catch (InstantiationException | IllegalAccessException | InvocationTargetException e) {
            throw new RuntimeException(e);
        }
    }
}
